package com.yexin.mail.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;


/**
 * 1.code in mybatis-plus
 *    1> import options
 *    <dependency>
 *             <groupId>com.baomidou</groupId>
 *             <artifactId>mybatis-plus-boot-starter</artifactId>
 *             <version>3.3.1</version>
 *         </dependency>
 *    2>config
 *     1.configure database resources
 *       import drivers
 *       <dependency>
 *             <groupId>mysql</groupId>
 *             <artifactId>mysql-connector-java</artifactId>
 *             <version>8.0.16</version>
 *         </dependency>
 *
 *       configure database resources in applicaion.yml file
 *
 *     2. configure mybatis-plus
 *          @MapperScan
 *          sql mapping files
 *
 *
 * 使用逻辑删除
 * 1. 配置全局的逻辑删除规则（省略）
 * 2。 配置逻辑删除的组建（省略）
 * 3。 加上逻辑删除注解
 *
 *
 * 添加 JSR 303 数字校验
 *1。在bean上加上 javax.validation.constraints内部的注解
 * 2。在contoller 中加上@validor的注解
 * 3。加上buildingResult用来提取返回的信息
 * 4。分组校验（完成多场景的复杂校验）
 *      entity给校验注解标注什么情况需要进行校验
 *      controller 上加上@vaildted 注解
 *      注意： 使用@Vailded  不标注分组的不生效，
 *5。自定义校验
 *  1。 便携一个自定义的校验注解
 *  2。 便携一个自定义的校验器 ConstraintValidator
 *  3。关联以上两个
 *  @Documented
 * @Constraint(
 *         validatedBy = {ListValueConstraintValidator.class「可以指定多个不同的校验器」}
 * )
 * @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
 * @Retention(RetentionPolicy.RUNTIME)
 *
 *
 *
 * 4。统一的异常处理
 * @ControllerAdvice
 *
 */
@EnableFeignClients("com.yexin.mail.product.feign")
@EnableDiscoveryClient
@MapperScan("com.yexin.mail.product.dao")
@SpringBootApplication
public class MailProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(MailProductApplication.class, args);
    }

}
